有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在OpenJDK 11的源代码上运行DocumentationTool

我试图在OpenJDK 11的源代码上运行DocumentationTool

输出如下所示:

Constructing Javadoc information...
/Users/Borkdude/git/openjdk-jdk11/src/java.base/share/classes/java/lang/IllegalStateException.java:26: error: package exists in another module: java.base
package java.lang;

这个重复大约100次

我在Clojure中的代码如下所示:

(import '[javax.tools ToolProvider])
(let [dt (ToolProvider/getSystemDocumentationTool)
        fm (.getStandardFileManager dt nil nil nil)
        files (.getJavaFileObjectsFromFiles
               fm
               (filter #(str/ends-with? (.getPath %) ".java")
                       (file-seq (io/file "/Users/Borkdude/git/openjdk-jdk11/src/java.base/share/classes/java/lang"))))
        task (.getTask dt nil fm nil nil nil files)]
    (.call task))

如何消除错误:

error: package exists in another module: java.base
package java.lang;

?


共 (1) 个答案

  1. # 1 楼答案

    您可以编译整个模块,或者需要“修补”模块。这里有一个例子,假设您将src.zip解压缩到/tmp

    要编译整个模块:

    (import '[javax.tools ToolProvider])
    (require '[clojure.string :as str])
    
    (let [dt (ToolProvider/getSystemDocumentationTool)
          fm (.getStandardFileManager dt nil nil nil)
          files (.getJavaFileObjectsFromFiles
                 fm
                 (filter #(str/ends-with? (.getPath %) ".java")
                         (file-seq (io/file "/tmp/src/java.base/"))))
          task (.getTask dt nil fm nil nil nil files)]
      (.call task))  
    

    要修补模块(即仅编译某些源):

    (let [dt (ToolProvider/getSystemDocumentationTool)
          fm (.getStandardFileManager dt nil nil nil)
          files (.getJavaFileObjectsFromFiles
                 fm
                 (filter #(str/ends-with? (.getPath %) ".java")
                         (file-seq (io/file "/tmp/src/java.base/java/lang"))))
          opts [" patch-module" "java.base=/tmp/src"]
          task (.getTask dt nil fm nil nil opts files)]
      (.call task))